home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
EMULATOR
/
SID2WAV
/
!Sid2Wav
/
docs
/
Developer
< prev
next >
Wrap
Text File
|
1997-06-23
|
8KB
|
197 lines
### A beta release is just a snapshot of my working directory.
### Any applied changes have not been further examined.
CHANGES from 1.32.1 to 1.32.2:
* Corrected shared library in Un*x Makefiles.
* Big-endian file conversion fixed.
+ Merged AmigaOS conditional code.
CHANGES from 1.31-beta to 1.32:
* Minor quality fix on digi emulation in high/low order.
Thanks to Ulf Jaenicke-Roessler for the mention.
* Sync+Ring click fix. Thanks for the excellent tip, Kristoffer Johansson !
+ Implemented readable SID + operator 3 (frame based).
+ Added additional sidtune constructor, which takes one-file format sidtune
data from a memory buffer.
CHANGES from 1.30-pl6 to 1.31-beta:
+ Implementation of short temporary attack in ADSR volume envelope. Under
normal circumstances this would *require* a precise cycle-based 6510- and
ADSR-emulation. (e.g. drax/jsschrst.dat)
[Note: VACSID and Frodo don't handle it. CCS64, C64S do, but are not 100%
right either.]
+ Smarter locking/unlocking of noise waveform.
CHANGES from 1.27.4 to 1.30:
+ Most wanted feature: SID chip clock speed now can be set to either PAL or NTSC.
This affects the pitch but not the song speed unless "force song speed" is
chosen, which will force the C64 clock to be equal to the SID clock, setting
any PAL song to NTSC and vice versa. NTSC users now can listen to sids with the
intended song speed (the one preset for each sidtune), but the sound of an NTSC
SID chip. Clock speed checkbox's name still should be "C64 clock speed".
- Dropped ``forceClockSpeed''. More below.
+ Improved dynamic ADSR envelope emulation. A few sidtunes were dropping notes
since v1.27. If some still do, they are most likely bad rips, like the one
already found. Check the next HVSC update for working ones.
+ New measured volume mode (default, but experimental). Replaces previous
"measured master volume" mode, since that one did not achieve what I wanted
it to, anyway. Related checkbox should be renamed to just ``measured volume''.
+ Now setVoiceVolume() accepts a further argument, the relative voice volume from
0 (mute) to 256 (max). This also makes it possible to mute the centered auto
panning.
Previously you most likely used own code similar to this:
voice_volume = left_or_right_level * new_voice_volume / max_voice_volume
where: 0 <= new_voice_volume <= max_voice_volume
e.g.: 0 <= x <= 256, half volume: x = 128
If you don't feel like changing that code, use 256=max when calling
setVoiceVolume() in your code anywhere.
* Auto-panning default: Reset 4th voice to middle position.
o Stereo volume control documentation update.
In stereo mode and panning modes either modulate both, left and right, levels
with the voice_volume technique from above or via the new argument of
setVoiceVolume().
SIDEMU_FULLPANNING:
Slider position
Voice A
Left Right
X................... : full left, L=255/R=0
...................X : full right, L=0/R=255
..........X......... : middle, L=128/R=127 or L=127/R=128
.................... : mute, L=0/R=0
.....X.............. : more left than right, L=200/R=55
But also and *only* in FULLPANNING mode, but most likely not used, you can
set any possible combination of volume levels out of 0<=x<=255, for instance:
X..................X : louder middle, L=255/R=255
X.........x......... : full left and 50% right, L=255/R=128
SIDEMU_VOLCONTROL info was also unclear IMHO. setVoiceVolume() does not anymore
check the correctness of the given volume settings, since this would limit the
possibilities badly. But it does not do anything and returns false upon an invalid
voice number, voice_volume > 256 or no mixing mode, respectively.
Two voices should build a pair, satisfying the equation:
left(voice_A) + left(voice_B) <= 255
Generally, the equations:
sum leftLevel(i) <= 512 i=[1,2,3,4]
sum rightLevel(i) <= 512 i=[1,2,3,4]
must be satisfied, because only a maximum of two voices can be mixed
to one physical audio channel.
Building pairs can be, but don't has to be, done like this:
left(voice_A) = right(voice_B)
right(voice_A) = left(voice_B)
left(voice_A) + right(voice_A) <= 255
left(voice_B) + right(voice_B) <= 255
It is not possible to position both from a pair of voices on the same side.
Slider Pos.
Pair of voices
Left Right
Voice A: X................... : full left, L=255/R=0
Voice B: ...................X : full right, L=0/R=255
Voice A: ....X............... : L=200/R=55
Voice B: ...............X.... : L=55/R=200
Voice A: .........X.......... : middle, L=128/R=127
Voice B: .........X.......... : middle, L=127/R=128 (or vice versa)
Voice A: ...............X.... : L=55/R=200
Voice B: ....X............... : L=200/R=55
Voice A: ...................X : full right, L=0/R=255
Voice B: X................... : full left, L=255/R=0
Side note: You could also mute voice_A and then could safely do
left(voice_B)+right(voice_B) > 255, but you most likely will never do so,
as this would require a much more complex mixer.
o The following was done due to consistency and because I have replaced any internal
constants with the external configuration constants and because I think the name
"configuration" suits better than "specifications", which I found confusing and
unreadable. These changes build upon everything I found to be better in the
now obsolete pre-2.0 testing engine.
Single header file to include has not changed and still is ``player.h'' only.
o Dropped directories mos_6510/ and mos_6581/. Put all the emulation stuff into emu/.
Some files became obsolete.
*** Do the renaming in this order and you'll likely be safe !
o Renamed class ``sidEmuConfig'' to ``emuEngine''.
o Renamed structure ``sidEmuSpecs'' to ``emuConfig''.
o Renamed header file ``sidemu.h'' to ``emucfg.h''.
All configuration information resides in here.
o Renamed member function ``setSpecs'' to ``setConfig''.
o Renamed member function ``returnSpecs'' to ``returnConfig''.
o Dropped class ``mpuEmu''. Integrated its functionality into the
``emuEngine'' class. Also affects sidEmuFillBuffer() calls.
o Renamed ``MPU_PAL_CLOCK'' to ``SIDTUNE_CLOCK_PAL''.
o Renamed ``MPU_NTSC_CLOCK'' to ``SIDTUNE_CLOCK_NTSC''.
o Above was named SIDTUNE_* because it is the same enum constant as in the
sidtune format support.
o Hope I didn't miss anything here.
! Changed the behaviour of the emulator engine configuration class in case of
invalid settings. Although the return value still is ``false'', the engine
will not be locked and neither be moved into an unusable state. Be aware that
this is not really a difference to before, because you are able to make
settings different than you made for your audio driver (e.g. replaying stereo
SID data on a mono soundcard set up).
At any time you can read out the current settings using returnConfig().
Consider the ``false'' return value of functions like setVoiceVolume() or
setConfig() as a hint and debugging aid. Basically, you should only write
valid settings to the emulator engine, so your application never receives
a ``false''.
- Dropped ``forceClockSpeed''. Now is ``forceSongSpeed'' and was moved to the
``emuConfig'' structure. If ``true'' it overrides the sidtune song speed and
sets the C64 clock to the SID clock. Drop the ``forceClockSpeed'' argument
from every call to sidEmuInitializeSong().
Changing ``clockSpeed'' will affect the playback upon the next call to
setConfig().
Changing ``forceSongSpeed'' will affect the playback upon the next call to
sidEmuInitializeSong().
* Typos in (abandoned) portable fixpoint mode (DIRECT_FIXPOINT off).
* By default set a random seed value from a virtual member function using <time.h>.